cssparser: Change APIs that work with files
authorBenjamin Otte <otte@redhat.com>
Wed, 18 Apr 2012 17:43:24 +0000 (19:43 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 11 May 2012 14:42:12 +0000 (16:42 +0200)
Now that we keep track of the parser's file, we don't require it to be
passed anymore.

gtk/gtkcssimageurl.c
gtk/gtkcssparser.c
gtk/gtkcssparserprivate.h
gtk/gtkcssprovider.c
gtk/gtkcssstylefuncs.c

index 8fa2965a423b23b4c12bd607bfe550288a8a4e90..b12d8c56bf97b509c10d6dfa632e0fb85d33b90f 100644 (file)
@@ -72,7 +72,7 @@ gtk_css_image_url_parse (GtkCssImage  *image,
   GError *error = NULL;
   GFileInputStream *input;
 
-  file = _gtk_css_parser_read_url (parser, base);
+  file = _gtk_css_parser_read_url (parser);
   if (file == NULL)
     return FALSE;
 
index 7d3fa952745804b39fca27f8c19f9c5554b44738..bedfdec1c1bf75d3add4d282001d7de6ec85459b 100644 (file)
@@ -125,6 +125,49 @@ _gtk_css_parser_get_position (GtkCssParser *parser)
   return parser->data - parser->line_start;
 }
 
+static GFile *
+gtk_css_parser_get_base_file (GtkCssParser *parser)
+{
+  GFile *base;
+
+  if (parser->file)
+    {
+      base = g_file_get_parent (parser->file);
+    }
+  else
+    {
+      char *dir = g_get_current_dir ();
+      base = g_file_new_for_path (dir);
+      g_free (dir);
+    }
+
+  return base;
+}
+
+GFile *
+_gtk_css_parser_get_file_for_path (GtkCssParser *parser,
+                                   const char   *path)
+{
+  GFile *base, *file;
+
+  g_return_val_if_fail (parser != NULL, NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  base = gtk_css_parser_get_base_file (parser);
+  file = g_file_resolve_relative_path (base, path);
+  g_object_unref (base);
+
+  return file;
+}
+
+GFile *
+_gtk_css_parser_get_file (GtkCssParser *parser)
+{
+  g_return_val_if_fail (parser != NULL, NULL);
+
+  return parser->file;
+}
+
 void
 _gtk_css_parser_take_error (GtkCssParser *parser,
                             GError       *error)
@@ -781,8 +824,7 @@ _gtk_css_parser_try_hash_color (GtkCssParser *parser,
 }
 
 GFile *
-_gtk_css_parser_read_url (GtkCssParser *parser,
-                          GFile        *base)
+_gtk_css_parser_read_url (GtkCssParser *parser)
 {
   gchar *path;
   char *scheme;
@@ -836,7 +878,7 @@ _gtk_css_parser_read_url (GtkCssParser *parser,
         }
     }
 
-  file = g_file_resolve_relative_path (base, path);
+  file = _gtk_css_parser_get_file_for_path (parser, path);
   g_free (path);
 
   return file;
index 8609531f024513225579e23e6fa2a914531eb6f6..3c6f3ba81bfb8792aab1e9878c1b28a88551868d 100644 (file)
@@ -47,6 +47,9 @@ void            _gtk_css_parser_error_full        (GtkCssParser          *parser
 
 guint           _gtk_css_parser_get_line          (GtkCssParser          *parser);
 guint           _gtk_css_parser_get_position      (GtkCssParser          *parser);
+GFile *         _gtk_css_parser_get_file          (GtkCssParser          *parser);
+GFile *         _gtk_css_parser_get_file_for_path (GtkCssParser          *parser,
+                                                   const char            *path);
 
 gboolean        _gtk_css_parser_is_eof            (GtkCssParser          *parser);
 gboolean        _gtk_css_parser_begins_with       (GtkCssParser          *parser,
@@ -87,8 +90,7 @@ gboolean        _gtk_css_parser_try_hash_color    (GtkCssParser          *parser
 gboolean        _gtk_css_parser_has_number        (GtkCssParser          *parser);
 char *          _gtk_css_parser_read_string       (GtkCssParser          *parser);
 char *          _gtk_css_parser_read_value        (GtkCssParser          *parser);
-GFile *         _gtk_css_parser_read_url          (GtkCssParser          *parser,
-                                                   GFile                 *base);
+GFile *         _gtk_css_parser_read_url          (GtkCssParser          *parser);
 
 void            _gtk_css_parser_skip_whitespace   (GtkCssParser          *parser);
 void            _gtk_css_parser_resync            (GtkCssParser          *parser,
index 6ed7ddefc16791850af2a2880236abe72f3ac649..31bf88953fad91305decc08841c14dc0ccee7c4a 100644 (file)
@@ -1899,8 +1899,7 @@ parse_import (GtkCssScanner *scanner)
     }
   else
     {
-      file = _gtk_css_parser_read_url (scanner->parser,
-                                       gtk_css_scanner_get_base_url (scanner));
+      file = _gtk_css_parser_read_url (scanner->parser);
     }
 
   if (file == NULL)
index 7456442934337320dbd4aaa292c76dca32ca50d0..538079dd27410b92676f182639081fd35f9d1390 100644 (file)
@@ -725,7 +725,7 @@ pattern_value_parse (GtkCssParser *parser,
       cairo_t *cr;
       cairo_matrix_t matrix;
 
-      file = _gtk_css_parser_read_url (parser, base);
+      file = _gtk_css_parser_read_url (parser);
       if (file == NULL)
         return FALSE;